package com.smart.community.property.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.smart.community.commons.entity.property.UserPropertyCompany;
import com.smart.community.commons.result.Result;
import java.util.List;

import javax.validation.constraints.NotNull;

/**
 * 用户物业公司关联服务接口
 * @author Wu.Liang
 * @since 2025-06-29
 */
public interface IUserPropertyCompanyService extends IService<UserPropertyCompany> {
    /**
     * 为用户分配物业公司
     * @param userId 用户ID
     * @param propertyCompanyId 物业公司ID
     * @param position 职位
     * @param department 部门
     * @param employeeNo 员工编号
     * @return 操作结果
     * @throws Exception 统一异常
     */
    Result<Void> assignUserToPropertyCompany(Long userId, Long propertyCompanyId, String position, String department, String employeeNo) throws Exception;

    /**
     * 移除用户与物业公司的关联
     * @param userId 用户ID
     * @param propertyCompanyId 物业公司ID
     * @return 操作结果
     * @throws Exception 统一异常
     */
    Result<Void> removeUserFromPropertyCompany(Long userId, Long propertyCompanyId) throws Exception;

    /**
     * 更新用户在物业公司的信息
     * @param userId 用户ID
     * @param propertyCompanyId 物业公司ID
     * @param position 职位
     * @param department 部门
     * @param employeeNo 员工编号
     * @return 操作结果
     * @throws Exception 统一异常
     */
    Result<Void> updateUserPropertyCompanyInfo(Long userId, Long propertyCompanyId, String position, String department, String employeeNo) throws Exception;

    /**
     * 获取用户关联的物业公司列表
     * @param userId 用户ID
     * @return 物业公司关联列表
     * @throws Exception 统一异常
     */
    List<UserPropertyCompany> getUserPropertyCompanies(Long userId) throws Exception;

    /**
     * 获取物业公司的用户列表
     * @param propertyCompanyId 物业公司ID
     * @return 用户关联列表
     * @throws Exception 统一异常
     */
    List<UserPropertyCompany> getPropertyCompanyUsers(Long propertyCompanyId) throws Exception;

    /**
     * 检查用户是否已关联物业公司
     * @param userId 用户ID
     * @param propertyCompanyId 物业公司ID
     * @return 是否已关联
     * @throws Exception 统一异常
     */
    boolean isUserAssignedToPropertyCompany(Long userId, Long propertyCompanyId) throws Exception;

    /**
     * 查询物业公司关联的用户ID
     * @author Wu.Liang
     * @date 2025年8月12日
     * @param propertyCompanyId
     * @return
     * @throws Exception
     */
	List<Long> getUserIdsByPropertyCompanyId(@NotNull Long propertyCompanyId) throws Exception;

	/**
	 * 查询物业公司关联的用户ID
	 * @author Wu.Liang
	 * @date 2025年8月12日
	 * @param propertyCompanyIds
	 * @return
	 * @throws Exception
	 */
	List<Long> getUserIdsByPropertyCompanyIds(@NotNull List<Long> propertyCompanyIds) throws Exception;
} 